/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.notaria.guerrasalas.be;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

/**
 *
 * @author Administrador
 */
@Entity
@Table(name = "VEHICULO", catalog = "BASE_NOTARIAL", schema = "dbo")
@NamedQueries({
    @NamedQuery(name = "Vehiculo.findAll", query = "SELECT v FROM Vehiculo v"),
    @NamedQuery(name = "Vehiculo.findByIdVehiculo", query = "SELECT v FROM Vehiculo v WHERE v.idVehiculo = :idVehiculo"),
    @NamedQuery(name = "Vehiculo.findByNroPlacaODua", query = "SELECT v FROM Vehiculo v WHERE UPPER(v.nroPlaca) LIKE :nroPlaca OR UPPER(v.dua) LIKE :dua")
})
public class Vehiculo implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "ID_VEHICULO", nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idVehiculo;
    @Column(name = "NRO_PLACA", length = 10)
    private String nroPlaca;
    @Column(name = "DUA", length = 30)
    private String dua;
    @Enumerated
    @Basic(optional = false)
    @Column(name = "MARCA", nullable = false, length = 50)
    private Marca marca;
    @Basic(optional = false)
    @Column(name = "MODELO", nullable = false, length = 50)
    private String modelo;
    @Basic(optional = false)
    @Column(name = "NRO_SERIE", nullable = false, length = 30)
    private String nroSerie;
    @Basic(optional = false)
    @Column(name = "COLOR", nullable = false, length = 50)
    private String color;
    @Basic(optional = false)
    @Column(name = "ANIO_FABRICACION", nullable = false)
    private int anioFabricacion = 1900;
    @Basic(optional = false)
    @Column(name = "CLASE", nullable = false, length = 50)
    private String clase;
    @Basic(optional = false)
    @Column(name = "NRO_MOTOR", nullable = false, length = 50)
    private String nroMotor;
    @Basic(optional = false)
    @Column(name = "CARROCERIA", nullable = false, length = 50)
    private String carroceria;
    @Basic(optional = false)
    @Column(name = "PRECIO", nullable = false, precision = 19, scale = 4)
    private Double precio;
    @Enumerated(EnumType.ORDINAL)
    @Basic(optional = false)
    @Column(name = "MONEDA", nullable = false)
    private Moneda moneda;
    @Enumerated(EnumType.ORDINAL)
    @Basic(optional = false)
    @Column(name = "ESTADO", nullable = false)
    private EstadoEntidad estado = EstadoEntidad.Activo;
    @Basic(optional = false)
    @Column(name = "FECHA_CREACION", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaCreacion = new Date();
    @Column(name = "FECHA_ACTUALIZACION")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaActualizacion;
    @Column(name = "FECHA_BAJA")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaBaja;
    @JoinColumn(name = "FID_DERECHO_PROPIEDAD", referencedColumnName = "ID_DERECHO_PROPIEDAD")
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private DerechoPropiedad derechoPropiedad;
    @Transient
    private boolean seleccionado;

    @PreUpdate
    @PrePersist
    private void validarFormato() {
        setModelo(modelo != null ? modelo.toUpperCase() : null);
        setDua(dua != null ? dua.toUpperCase() : null);
        setNroPlaca(nroPlaca != null ? nroPlaca.toUpperCase() : null);
        setCarroceria(carroceria != null ? carroceria.toUpperCase() : null);
        setClase(clase != null ? clase.toUpperCase() : null);
        setColor(color != null ? color.toUpperCase() : null);
        setNroMotor(nroMotor != null ? nroMotor.toUpperCase() : null);
        setNroSerie(nroSerie != null ? nroSerie.toUpperCase() : null);
    }

    public Vehiculo() {
    }

    public Vehiculo(Long idVehiculo) {
        this.idVehiculo = idVehiculo;
    }

    public Vehiculo(Long idVehiculo, Marca marca, String modelo, String nroSerie, String color, int anioFabricacion, String clase, String nroMotor, String carroceria, Double precio, Moneda moneda, EstadoEntidad estado, Date fechaCreacion) {
        this.idVehiculo = idVehiculo;
        this.marca = marca;
        this.modelo = modelo;
        this.nroSerie = nroSerie;
        this.color = color;
        this.anioFabricacion = anioFabricacion;
        this.clase = clase;
        this.nroMotor = nroMotor;
        this.carroceria = carroceria;
        this.precio = precio;
        this.moneda = moneda;
        this.estado = estado;
        this.fechaCreacion = fechaCreacion;
    }

    public Long getIdVehiculo() {
        return idVehiculo;
    }

    public void setIdVehiculo(Long idVehiculo) {
        this.idVehiculo = idVehiculo;
    }

    public String getNroPlaca() {
        return nroPlaca;
    }

    public void setNroPlaca(String nroPlaca) {
        this.nroPlaca = nroPlaca;
    }

    public String getDua() {
        return dua;
    }

    public void setDua(String dua) {
        this.dua = dua;
    }

    public Marca getMarca() {
        return marca;
    }

    public void setMarca(Marca marca) {
        this.marca = marca;
    }

    public String getModelo() {
        return modelo;
    }

    public void setModelo(String modelo) {
        this.modelo = modelo;
    }

    public String getNroSerie() {
        return nroSerie;
    }

    public void setNroSerie(String nroSerie) {
        this.nroSerie = nroSerie;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getAnioFabricacion() {
        return anioFabricacion;
    }

    public void setAnioFabricacion(int anioFabricacion) {
        this.anioFabricacion = anioFabricacion;
    }

    public String getClase() {
        return clase;
    }

    public void setClase(String clase) {
        this.clase = clase;
    }

    public String getNroMotor() {
        return nroMotor;
    }

    public void setNroMotor(String nroMotor) {
        this.nroMotor = nroMotor;
    }

    public String getCarroceria() {
        return carroceria;
    }

    public void setCarroceria(String carroceria) {
        this.carroceria = carroceria;
    }

    public Double getPrecio() {
        return precio;
    }

    public void setPrecio(Double precio) {
        this.precio = precio;
    }

    public EstadoEntidad getEstado() {
        return estado;
    }

    public void setEstado(EstadoEntidad estado) {
        this.estado = estado;
    }

    public Moneda getMoneda() {
        return moneda;
    }

    public void setMoneda(Moneda moneda) {
        this.moneda = moneda;
    }

    public Date getFechaCreacion() {
        return fechaCreacion;
    }

    public void setFechaCreacion(Date fechaCreacion) {
        this.fechaCreacion = fechaCreacion;
    }

    public Date getFechaActualizacion() {
        return fechaActualizacion;
    }

    public void setFechaActualizacion(Date fechaActualizacion) {
        this.fechaActualizacion = fechaActualizacion;
    }

    public Date getFechaBaja() {
        return fechaBaja;
    }

    public void setFechaBaja(Date fechaBaja) {
        this.fechaBaja = fechaBaja;
    }

    public DerechoPropiedad getDerechoPropiedad() {
        return derechoPropiedad;
    }

    public void setDerechoPropiedad(DerechoPropiedad derechoPropiedad) {
        this.derechoPropiedad = derechoPropiedad;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Vehiculo other = (Vehiculo) obj;
        if (this.idVehiculo != other.idVehiculo && (this.idVehiculo == null || !this.idVehiculo.equals(other.idVehiculo))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 41 * hash + (this.idVehiculo != null ? this.idVehiculo.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
        return idVehiculo.toString();
    }

    public boolean isSeleccionado() {
        return seleccionado;
    }

    public void setSeleccionado(boolean seleccionado) {
        this.seleccionado = seleccionado;
    }
}
